package com.zjsru.plan2024.week;

/**
 * @Author: cookLee
 * @Date: 2024-02-27
 */
public class LargestSquareArea {

    /**
     * 主
     * \
     * 输入：bottomLeft = [[1,1],[2,2],[3,1]], topRight = [[3,3],[4,4],[6,6]]
     * 输出：1
     * 解释：边长为 1 的正方形可以放入矩形 0 和矩形 1 的交集区域，或矩形 1 和矩形 2 的交集区域。因此最大面积是边长 * 边长，即 1 * 1 = 1。
     * 可以证明，边长更大的正方形无法放入任何交集区域。
     * \
     * 输入：bottomLeft = [[1,1],[2,2],[1,2]], topRight = [[3,3],[4,4],[3,4]]
     * 输出：1
     * 解释：边长为 1 的正方形可以放入矩形 0 和矩形 1，矩形 1 和矩形 2，或所有三个矩形的交集区域。因此最大面积是边长 * 边长，即 1 * 1 = 1。
     * 可以证明，边长更大的正方形无法放入任何交集区域。
     * 请注意，区域可以由多于两个矩形的交集构成。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        LargestSquareArea largestSquareArea = new LargestSquareArea();
        int[][] bottomLeft = new int[][]{{1, 1}, {2, 2}, {3, 1}};
        int[][] topRight = new int[][]{{3, 3}, {4, 4}, {6, 6}};
        System.out.println(largestSquareArea.largestSquareArea(bottomLeft, topRight));
    }

    /**
     * 最大平方面积
     *
     * @param bottomLeft 左下
     * @param topRight   右上
     * @return long
     */
    public long largestSquareArea(int[][] bottomLeft, int[][] topRight) {
        long ans = 0;
        //如果矩形有交集，那么交集一定是矩形。求出这个交集矩形的左下角和右上角
        for (int i = 0; i < bottomLeft.length; i++) {
            int[] b1 = bottomLeft[i];
            int[] t1 = topRight[i];
            //取交集的正方形
            for (int j = i + 1; j < bottomLeft.length; j++) {
                int[] b2 = bottomLeft[j];
                int[] t2 = topRight[j];
                //交界图形的高度
                int height = Math.min(t1[1], t2[1]) - Math.max(b1[1], b2[1]);
                //交界图形的宽度度
                int weight = Math.min(t1[0], t2[0]) - Math.max(b1[0], b2[0]);
                int size = Math.min(height, weight);
                if (size > 0) {
                    //要求是正方形
                    ans = Math.max(ans, (long) size * size);
                }
            }
        }
        return ans;
    }

}
